<?php
/**
 * classe SqlTransaction
 * esta classe provê os métodos necessários manipular transações
 */
final class SqlTransacao {
    
    private static $conexao;	// conexão ativa

    /**
     * Está declarado como private para impedir
     * que se crie instâncias de SqlTransacao
     */
    private function __construct() {}

    /**
     * Abre uma transação e uma conexão ao BD
     *
     * @param string $banco nome do banco de dados
     */
    public static function open($banco) {
    // abre uma conexão e armazena na propriedade estática $conexao
        if ( empty(self::$conexao) ) {
            self::$conexao = Conexao::open($banco); // abre conexao com o banco de dados
            self::$conexao->beginTransaction(); // inicia a transação
        }
    }

    /**
     * retorna a conexão ativa da transação
     *
     * @return objeto Retornara o objeto PDO
     */
    public static function get() {
        return self::$conexao;
    }

    /**
     * desfaz todas operações realizadas na transação
     */
    public static function rollback() {
        if ( self::$conexao ) {
            self::$conexao->rollback();
            self::$conexao = NULL;
        }
    }

    /**
     * Aplica todas operações realizadas e fecha a transação
     */
    public static function close() {
        if ( self::$conexao ) {
        // aplica as operações realizadas
        // durante a transação
            self::$conexao->commit();
            self::$conexao = NULL;
        }
    }
}
?>